# 二手奢侈品估价模型

# data.txt 导出商品的信息数据，共3420个商品记录
# s.txt S级商品的信息，共204个商品记录
# a.txt A级商品的信息，共1011个商品记录
# b.txt B级商品的信息，共1475个商品记录
# c.txt C级商品的信息，共734个商品记录

# 导入 matplotlib 的 pyplot 子库，提供绘图API
import matplotlib.pyplot as plt
# 导入 sklearn 的 linear_model 模块
from sklearn import linear_model
# 导入 科学计算库
import numpy as np

# 设置X轴标签
plt.xlabel('市场价格')
# 设置Y轴标签
plt.ylabel('回收价格')
# 设置标题
plt.title('99成新')

scatter_alpha = 1

# 读取数据 - S级商品价格数据
datas = np.transpose(np.loadtxt('s.txt', skiprows=1))
price1s = datas[0, :]  # 市场价
price2s = datas[3, :]  # 销售价
plt.scatter(price1s, price2s, c='c', marker='o', s=10, alpha=scatter_alpha) # 绘制散点图
datasets_X = price1s
datasets_Y = price2s

# 分割数据集 train_test_split  训练集/测试集比例8/2
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(datasets_X, datasets_Y, test_size=0.2)

# 对 X_train 转化为数组，并转置（变成二维），以符合线性回归拟合函数输入参数要求
X_train = np.array(X_train).reshape([len(X_train), 1])
# 将 Y_train 转化为数组
Y_train = np.array(Y_train)
minX = min(X_train)
maxX = max(X_train)
# 以 X_train 的最大值和最小值建立等差数列，方便后续画图
X = np.arange(minX, maxX).reshape([-1, 1])

# 建立线性回归方程，拟合数据并输出模型
linear = linear_model.LinearRegression()
model = linear.fit(X_train, Y_train)

# 查看回归方程系数
print('系数因子 coef ficient：', linear.coef_)
# 查看回归方程截距
print('截距 intercept：', linear.intercept_)
# 绘制直线
plt.plot(X, linear.predict(X), color='black')

# 预测验证
# 对 X_test 转化为数组，并转置（变成二维），以符合线性回归拟合函数输入参数要求
X_test = np.array(X_test).reshape([len(X_test), 1])
# 将 Y_test 转化为数组
Y_test = np.array(Y_test)
predictions = linear.predict(X_test)
print('predictions[0:5]', predictions[0:5])
# 输出预测准确度
print('预测准确度:', model.score(X_test, Y_test))

plt.show()
